package cn.edu.swu.miniwebsvr.core;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

//	统一的用户请求数据模型。
//	存储解析后的 Method、URL、Header、URL 参数和 Body 参数。提供统一的参数访问方法。
public class Parameter {
    // 新增：存储原始请求体（如 JSON、XML 等非表单格式的内容）
    private String rawBody;

    // 新增：设置原始请求体
    public void setRawBody(String rawBody) {
        this.rawBody = rawBody;
    }

    // 新增：获取原始请求体
    public String getRawBody() {
        return rawBody;
    }

    private String method;//访问服务器的方法
    private String url;//路径
    private Map<String, String> urlParams = new HashMap<>();//url传的参数
    private Map<String, String> bodyParams = new HashMap<>();
    private Map<String, String> headers = new HashMap<>();//http协议里面的header信息

    // TODO: [学号/姓名] 补充必要的构造函数、setter、getter方法
    public void setUrlParams(Map<String, String> urlParams) {
        this.urlParams = urlParams;
    }

    public void setBodyParams(Map<String, String> bodyParams) {
        this.bodyParams = bodyParams;
    }

    public void setHeaders(Map<String, String> headers) {
        this.headers = headers;
    }

    public Map<String, String> getUrlParams() {
        return urlParams;
    }

    public Map<String, String> getBodyParams() {
        return bodyParams;
    }

    public Map<String, String> getAllParams() {
        Map<String, String> allParams = new HashMap<>();
        allParams.putAll(urlParams);
        allParams.putAll(bodyParams);
        return Collections.unmodifiableMap(allParams);
    }

    public String getParam(String name) {
        if (bodyParams.containsKey(name)) {
            return bodyParams.get(name);
        }
        return urlParams.get(name);
    }

    // 示例 Getter/Setter，请补全
    public void setMethod(String method) {
        this.method = method;
    }

    public String getMethod() {
        return this.method;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUrl() {
        return this.url;
    }

    public Map<String, String> getHeaders() {
        return headers;
    }
}
